package com.xw.Listener;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import com.xw.Enums.RedisEventEnums;
import com.xw.Task.GetMailTask;

/**
 * 描述:Redis事件消息监听器
 * @author 杨建全
 * @date 2017年11月14日 下午5:10:38
 */
@Component
public class RedisEventListener implements MessageListener{

	private static final Logger logger = LoggerFactory.getLogger(RedisEventListener.class);
	
	@Autowired
	private RedisTemplate<String,Object> redisTemplate;
	@Autowired
	private GetMailTask getMailTask;
	
	@Override
	public void onMessage(Message msg, byte[] pattern) {
		String topic = (String)redisTemplate.getStringSerializer().deserialize(msg.getChannel());  
		String bodyValue = (String)redisTemplate.getValueSerializer().deserialize(msg.getBody()); 
		logger.info("收到事件,topic="+topic+",body="+bodyValue);
		//处理事件
		handleEvent(topic,bodyValue);
	}

	/**
	 * 描述：处理事件
	 * @author 杨建全
	 * @date 2017年11月15日
	 * @param topic 主题
	 * @param bodyValue 事件内容
	 */
	private void handleEvent(String topic, String bodyValue) {
		switch (RedisEventEnums.getByValue(bodyValue)) {
			case RebootGetMailTask:
				if(getMailTask.checkIsNeedToFatchMailWhenStart()){
					getMailTask.restart();
				}else {
					logger.error("收到重启事件，但是本机已有其他服务拉取邮件，本机不处理。");
				}
				break;
			default:
				logger.error("未知事件类型，不处理!");;
				break;
			}
	}

}
